The invention relates generally to the field of computer systems and more particularly to system that employ redundant array of independent disks (RAID) architecture.
A computer system includes an operating system whose primary function is the management of hardware and software resources in the computer system. The operating system handles input/output (I/O) requests from software processes or applications to exchange data with on-line external storage devices in a storage subsystem. The operating system (such as Windows NT(copyright) available from Microsoft, Corp. of Redmond, Wash.) forwards I/O requests to an I/O subsystem, which, in turn, converts the logical addresses is into physical locations in the storage devices and commands the latter devices to engage in the requested storage or retrieval operations.
The on-line storage devices on a computer are configured from one or more disks into logical units of storage space referred to herein as xe2x80x9ccontainers.xe2x80x9d Examples of containers include volume sets, stripe sets, mirror sets, and various Redundant Array of Independent Disk (RAID) implementations. A volume set comprises one or more physical partitions, i.e., collections of blocks of contiguous space on disks, and is composed of space on one or more disks. Data is stored in a volume set by filling all of the volume""s partitions in one disk drive before using volume partitions in another disk drive. A stripe set is a series of partitions on multiple disks, one partition per disk, that is combined into a single logical volume. Data stored in a stripe set is evenly distributed among the disk drives in the stripe set. In its basic configuration, a stripe set is also known as a xe2x80x9cRAID 0xe2x80x9d configuration. A mirror set is composed of volumes on multiple disks, whereby a volume on one disk is a duplicate copy of an equal sized volume on another disk in order to provide data redundancy. A basic configuration for a mirror set is known as xe2x80x9cRAID 1.xe2x80x9d There is often a desire to increase data reliability in a stripe set by using parity distributed across storage blocks with respect to each stripe. Where such parity is provided to the stripe set, the configuration is known as xe2x80x9cRAID 5.xe2x80x9d In an even more complex implementation, where stripe sets are mirrored on a plurality of containersxe2x80x94and redundant data is distributed across the stripes, the resulting configuration is known as xe2x80x9cRAID 10.xe2x80x9d Generally speaking, all configurations of the RAID implementation (RAID 0-10) provide a collection of partitions, where each partition is composed of space from one disk in order to support data redundancy.
According to a prior system, the I/O subsystem configures the containers through a software entity called a xe2x80x9ccontainer manager.xe2x80x9d Essentially the container manager sets up a mapping structure to efficiently map logical addresses received from the operating system to physical addresses on storage devices. The I/O subsystem also includes a software driver for each type of container configuration on the system. These drivers use the mapping structure to derive the physical addresses, which they then pass to the prospective storage devices for storage and retrieval operations.
Specifically, when the computer system is initially organized, the I/O subsystem""s container manager configures the containers and maintains the configuration tables in a container layer of the I/O subsystem. In accordance with a co-pending related U.S. patent application Ser. No. 08/964,304, entitled, File Array Storage Architecture by Richard Napolitano et al., the container layer of the I/O subsystem comprises a Device Switch Table, a Container Array, and a Partition Table. The teachings of this application are expressly incorporated herein by reference. The Device Switch table consists of entries; each of which ordinarily points to the entry point of a container driver that performs I/O operations on a particular type of container. The Container Array is a table of entries, each of which ordinarily points to data structures used by a container driver. There is a fixed one-to-one relationship between the Device Switch Table and the Container Array. The Partition Table contains partition structures copied from disk drives for each container on the system. Each Partition Table entry points to one physical disk drive and allows the container driver to access physical location in the on-line storage devices.
When a software process issues an I/O request, the operating system accepts I/O request and translates it into an I/O request bound for a particular device. The operating system sends the I/O request which includes, inter alia, a block number for the first block of data requested by the application and also a pointer to a Device Switch Table entry which points to a container driver for the container where the requested data is stored. The container driver accesses the Container Array entry for pointers to the data structures used in that container and to Partition Table entries for that container. Based on the information in the data structures, the container driver also accesses Partition Table entries to obtain the starting physical locations of the container on the storage devices. Based on the structures pointed to by the Container Array entry and partition structures in the Partition Table, the container driver sends the I/O request to the appropriate disk drivers for access to the disk drives.
In prior systems, the containers are configured during the initial computer setup and can not be reconfigured during I/O processing without corrupting currently processing I/O requests. As storage needs on a computer system change, the system administrators may need to reconfigure containers to add disks to them or remove disks from them, partition disks drives to form new containers, and/or increase the size of existing containers. If containers are reconfigured during I/O processing in the I/O subsystem, the reconfiguration may corrupt or erase the currently processing I/O requests. However, shutting down the system to reconfigure containers may be unacceptable for businesses that require high availability, i.e., twenty-four hours/seven days a week on-line activity.
One aspect of the system described herein is to provide a method of routing processing I/O requests in the I/O subsystem to a different container than previously pointed to by the operating system. On-line storage devices are configured from one or more disks into logical units of storage space referred to herein as xe2x80x9ccontainers.xe2x80x9d Containers are created and maintained by a software entity called the xe2x80x9ccontainer manager.xe2x80x9d Each type of container on the system has an associated driver, which processes system requests on that type of container.
It is often desirable to move data from one RAID disk configuration to another. For example, where more disk space is needed, a user may be willing to sacrifice the added security of RAID 5 parity for the reduced data storage demands of a standard RAID 0 stripe set. Similarly, where more security is a concern, the user may wish to xe2x80x9cmigratexe2x80x9d the data from a RAID 0 to a RAID 5 configuration. Likewise, there are operations in which it may be necessary to add or remove disk space, either virtually or physically. In such instances, data must migrate to a new container set. Likewise, the operation known as On-line Container Expansion (OCE) entails a reconfiguration of storage to create new containers. In others circumstances, it may be desirable to reorganized a particular set of data to either emphasize or de-emphasize the use of a certain physical drive.
Each of these circumstances involves data migration between containers. On common approach for performing migration is to employ a specialized driver, that operates in conjunction with the general RAID driver and adapter firmware. This driver enables the dynamic transfer of data between container spaces. However, these drivers may have certain disadvantages. They are very complex.
It is therefore an object of this invention to provide a more efficient system and method for data migration between container spaces. This technique should enable migration of data between a wide range of RAID levels, and should allow data to move readily into new physical space or into the same physical space in which it originally resided.
This invention overcomes the disadvantages of the prior art by providing a system and method for changing (migrating) data between various levels and configurations of RAID implementations. A specialized driver establishes a specialized xe2x80x9cmorphxe2x80x9d container in a top level above primary and secondary level containers. The morph container communicates with the host computer I/O and arranges mapping of data between an original source container configuration and a new destination configuration. A morph container mapping structure is implemented to accomplish the mapping therebetween. Where data is migrated from an original container space back into an original space, a temporary container can be established to facilitate the transfer between the space.
The migration of data can be used to establish fewer or greater number of containers in the second structure than in the first structurexe2x80x94in the manner of an on-line container expansion (OCE) process. The drivers for the morph and other containers typically reside in the RAID driver, which can be implemented as hardware, software or a combination thereof.